<?php require_once(BASEPATH.'application/controllers/validaciones.php');
class stra extends validaciones{

	var $genesal=true;

	function stra(){
		
		parent::Controller();
		$this->load->library('rapyd');
		$this->back_dataedit='inventario/stra/filteredgrid';
        $this->load->library('Inventario');
	}

	function index(){
		
		redirect('inventario/stra/filteredgrid');
	}
	function filteredgrid(){
		
		$this->rapyd->load('datafilter','datagrid');

		$filter = new DataFilter('B&uacute;squeda de Transferencias entre almacenes');
		$filter->db->select(array( "numero",  "tipo_doc","fecha",  "(SELECT CONCAT(b.ubica,'-',b.ubides) FROM caub as b WHERE b.ubica=a.envia )envia",  "(SELECT CONCAT(b.ubica,'-',b.ubides) FROM caub as b WHERE b.ubica=a.recibe )recibe",  "observ1",  "observ2"));
		$filter->db->from('stra as a');

		$filter->numero = new inputField('N&uacute;mero', 'numero');
		$filter->numero->size=15;

		$filter->fecha = new dateonlyField('Fecha', 'fecha');
		$filter->fecha->size=12;

		$filter->envia = new inputField('Env&iacute;a', 'envia');
		$filter->envia->size=12;

		$filter->recibe = new inputField('Recibe', 'recibe');
		$filter->recibe->size=12;

		$filter->buttons('reset','search');
		$filter->build();

		$uri = anchor('inventario/stra/dataedit/show/<#numero#>','<#numero#>');

		$grid = new DataGrid('Lista de Transferencias');
		$grid->order_by('numero','desc');
		$grid->per_page = 15;
		$grid->use_function("substr");
		$grid->use_function('boton');

		
		function boton($tipo=''){
			
			IF($tipo=='X'){
				return 2;
			}else{
				return 1;	
			}
		}
		
				
		$atts = array(
			 'width'      => '800',
			 'height'     => '600',
			 'scrollbars' => 'yes',
			 'status'     => 'yes',
			 'resizable'  => 'yes',
			 'screenx'    => '0',
			 'screeny'    => '0'
		 );		
		
		$uri_2  = anchor_popup('formatos/ver/STRA/<#numero#>',img(array('src'=>'images/pdf_logo.gif','border'=>'0','alt'=>'Ver Html','height'=>'15','title'=>'Ver Html')),$atts);
		$uri_2 .= anchor_popup('formatos/verhtml/STRA/<#numero#>',img(array('src'=>'images/html_icon.gif','border'=>'0','alt'=>'Ver Pdf','height'=>'15','title'=>'Ver Pdf')),$atts);
		$uri_2 .= img(array('src'=>'images/<boton><#tipo_doc#></boton>.gif','border'=>'0','alt'=>'Estado','height'=>'12','title'=>'Estado'));
					
		$grid->column('Acci&oacute;n',$uri_2,"align='center'");

		$grid->column_orderby('N&uacute;mero',$uri,'numero');
		$grid->column_orderby('Fecha','<dbdate_to_human><#fecha#></dbdate_to_human>','fecha','align=\'center\'');
		$grid->column('Env&iacute;a','envia','envia');
		$grid->column('Recibe','recibe','recibe');
		$grid->column('Observaci&oacute;n','observ1','observ1');

		//echo $grid->db->last_query();
		//$grid->add('inventario/stra/dataedit/create','Nueva Transferencia');
		$grid->build('datagridST');

		$data['filtro']  = $filter->output;
		$data['content'] = $grid->output;
		$data['title']   = heading('Transferencias de Inventario entre Almacenes');
		$data['head']    = $this->rapyd->get_head();
		$this->load->view('view_ventanas', $data);
	}
	function dataedit(){
		
		$this->rapyd->load('dataobject','datadetails');
		
		$modbus=array(
			'tabla'   =>'sinv',
			'columnas'=>array(
				'codigo' =>'C&oacute;digo',
				'descrip'=>'Descripci&oacute;n',
				'precio1' =>'Precio 1',
				'precio2' =>'Precio 2',
				'precio3' =>'Precio 3',
				'existen' =>'Existencia',
				'peso'=>'Peso'),
			'filtro'  =>array('codigo' =>'C&oacute;digo','descrip'=>'Descripci&oacute;n'),
			'retornar'=>array('codigo'=>'codigo_<#i#>','descrip'=>'descrip_<#i#>'),
			'where'   =>'activo = "S" AND tipo="01"',
			'script'  =>array('post_modbus("<#i#>")'),
			'p_uri'=>array(4=>'<#i#>'),
			'titulo'  =>'Busqueda de producto en inventario');
		$btn=$this->datasis->p_modbus($modbus,'<#i#>');

		$script="
		function post_add_itstra(id){
			$('#cantidad_'+id).numeric('.');
			return true;
		}";

		$do = new DataObject('stra');
		$do->rel_one_to_many('itstra', 'itstra', 'numero');
		//$do->rel_pointer('itstra','sinv','itstra.codigo=sinv.codigo','sinv.descrip as sinvdescrip');

		$edit = new DataDetails('Transferencia', $do);
		$edit->back_url = $this->back_dataedit;
		$edit->set_rel_title('itstra','Producto <#o#>');

		$edit->script($script,'create');
		$edit->script($script,'modify');

		$edit->pre_process('insert','_pre_insert');
		$edit->pre_process('update','_pre_update');
		$edit->post_process('delete','_post_delete');
		$edit->post_process('insert','_post_insert');

		$edit->numero= new inputField('N&uacute;mero', 'numero');
		$edit->numero->mode='autohide';
		$edit->numero->size=10;
		$edit->numero->apply_rules=false; //necesario cuando el campo es clave y no se pide al usuario
		$edit->numero->when=array('show','modify');
		
		$edit->tipo_doc = new  dropdownField ('Tipo','tipo_doc');
		$edit->tipo_doc->option("FC",'Transferencia Emitida');
        $edit->tipo_doc->option("X",'Transferencia Eliminada');
        $edit->tipo_doc->style='width:200px;';
        //$edit->tipo_doc->when=array('show');
        
        $edit->moneda = new dropdownField("Moneda", "moneda");
		$edit->moneda->style='width:200px;';
		$edit->moneda->option("","Seleccione la moneda" );
		$edit->moneda->options("SELECT codigo,descrip FROM moneda ORDER BY codigo");
		$edit->moneda->rule = 'required';
		
		$edit->cambio = new inputField('Cambio', 'cambio');
		$edit->cambio->css_class ='inputnum';
		$edit->cambio->size      = 12;
		$edit->cambio->when=array('show');

		$edit->fecha = new DateonlyField('Fecha', 'fecha','Y-m-d');
		$edit->fecha->insertValue = date('Y-m-d');
		$edit->fecha->rule = 'required';
		//$edit->fecha->mode = 'autohide';
		$edit->fecha->size = 12;
		$edit->fecha->rule= "callback_cambio";

		$edit->envia = new dropdownField('Almac&eacute;n que Env&iacute;a', 'envia');
		$edit->envia->option('','Seleccionar');
		$edit->envia->options('SELECT ubica,ubides FROM caub ORDER BY ubica');
		$edit->envia->rule ='required';
		$edit->envia->style='width:200px;';

		$edit->recibe = new dropdownField('Almac&eacute;n que Recibe', 'recibe');
		$edit->recibe->option('','Seleccionar');
		$edit->recibe->options('SELECT ubica,ubides FROM caub ORDER BY ubica');
		$edit->recibe->rule ='required|callback_chrecibe';
		$edit->recibe->style='width:200px;';

		$edit->observ1 = new inputField('Observaci&oacute;n','observ1');
		$edit->observ1->rule='max_length[60]|trim';
		$edit->observ1->size =32;
		$edit->observ1->maxlength =30;

		//comienza el detalle
		$edit->codigo = new inputField('C&oacute;digo <#o#>', 'codigo_<#i#>');
		$edit->codigo->db_name='codigo';
		$edit->codigo->append($btn);
		$edit->codigo->rule = 'trim|required';
		$edit->codigo->rel_id='itstra';
		$edit->codigo->maxlength=15;
		$edit->codigo->size     =15;

		$edit->descrip = new inputField('Descripci&oacute;n', 'descrip_<#i#>');
		$edit->descrip->db_name  = 'descrip';
		$edit->descrip->rel_id   = 'itstra';
		$edit->descrip->type     = 'inputhidden';
		$edit->descrip->maxlength= 45;
		$edit->descrip->size     = 40;

		$edit->cantidad = new inputField('Cantidad', 'cantidad_<#i#>');
		$edit->cantidad->db_name  ='cantidad';
		$edit->cantidad->css_class='inputnum';
		$edit->cantidad->rel_id   ='itstra';
		$edit->cantidad->rule     ='numeric|mayorcero|required';
		$edit->cantidad->maxlength=10;
		$edit->cantidad->autocomplete=false;
		$edit->cantidad->size     =10;
		//Fin del detalle

		$numero  =$edit->_dataobject->get("numero");
        $envia  =$edit->_dataobject->get("envia");
		
		$edit->estampa = new autoUpdateField('estampa' ,date('Ymd'), date('Ymd'));
		$edit->hora    = new autoUpdateField('hora',date('H:i:s'), date('H:i:s'));
		$edit->usuario = new autoUpdateField('usuario',$this->session->userdata('usuario'),$this->session->userdata('usuario'));

		$accion="javascript:window.location='".site_url("inventario/stra/anular/$numero/")."'";
        
        if($edit->_status=='show'){
			$numero   =$do->get('numero');	
			//$this->inventario->sp_costos($numero,'T');
		}
		
        IF($envia<>'INFI'){  
            $edit->button_status('btn_despacho','Anular Transferencia',$accion,'TR','show');
        }
		
		$edit->buttons('save', 'undo','back','add_rel');

		if($this->genesal){
			$edit->build();
			$conten['form']  =& $edit;
			$data['style']   = style('redmond/jquery-ui.css');

			$data['script']  = script('jquery.js');
			$data['script'] .= script('jquery-ui.js');
			$data['script'] .= script("jquery-impromptu.js");
			$data['script'] .= script('plugins/jquery.numeric.pack.js');
			$data['script'] .= script('plugins/jquery.ui.autocomplete.autoSelectOne.js');
			$data['script'] .= script('plugins/jquery.floatnumber.js');
			$data['script'] .= phpscript('nformat.js');
			$data['content'] = $this->load->view('view_stra', $conten,true);
			$data['title']   = heading('Transferencias de inventario');
			$data['head']    = $this->rapyd->get_head();
			$this->load->view('view_ventanas', $data);
		}else{
			$edit->on_save_redirect=false;
			$edit->build();

			if($edit->on_success()){
				$rt= 'Transferencia Guardada';
			}elseif($edit->on_error()){
				$rt= html_entity_decode(preg_replace('/<[^>]*>/', '', $edit->error_string));
			}
			return $rt;
		}
	}
	function _post_delete($do){
		
		$numero=$do->get('numero');
		$this->inventario->sp_costos($numero,'T');
		
		logusu('stra',"TRANSFERENCIA $numero ELIMINADA");
	}
	function anular($numero){
		
		$this->db->query("UPDATE stra set tipo_doc='X' WHERE numero='$numero'");
		
		$this->inventario->sp_costos($numero,'T');
		
		logusu('stra',"TRANSFERENCIA $numero ELIMINADO");
		
		redirect("inventario/stra/dataedit/show/$numero");
		
	}
	function chrecibe($recibe){
		$envia=$this->input->post('envia');
		if($recibe!=$envia){
			return true;
		}
		$this->validation->set_message('chrecibe','El almac&eacute;n que env&iacute;a no puede ser igual a que recibe');
		return false;
	}

	function _pre_ordp_insert($do){
		if($do->get('tipoordp')=='E'){
			$do->set('envia' ,'APRO');
			$do->set('recibe','PROD');
		}else{
			$do->set('envia' ,'PROD');
			$do->set('recibe','APRO');
		}

		$this->_pre_insert($do);
	}

	function _pre_insert($do){
		
		$numero=$this->datasis->fprox_numero('nstra');
		$transac = $this->datasis->fprox_numero('ntransa');
		
		$do->set('numero',$numero);
		$do->set('transac', $transac);
		
		$fecha=$do->get('fecha');
        
        $cambio=$this->datasis->dameval("SELECT cambio FROM cambio WHERE fecha='$fecha'");
        $do->set('cambio',$cambio);
		return true;
	}

	function _post_insert($do){

		$numero   =$do->get('numero');	
		$this->inventario->sp_costos($numero,'T');
		
		logusu('stra',"TRANSFERENCIA $numero CREADA");
		return true;
	}
	function _pre_update($do){
		$do->error_message_ar['pre_upd']='No se pueden modificar las tranferencias.';
		return false;
	}
	function _pre_delete($do){
		$do->error_message_ar['pre_del']='No se pueden eliminar';
		return false;
	}
}
